package com.tool4j.util;

/**
 * @author Deng.Weiping
 * @since 2023/7/17 8:57
 */

import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;

import java.util.Date;

/**
 * 时间24小时显示格式化
 */
public class DateCalculateUtil {

    /**
     * 计算日期距离当前日期的间隔
     * <p>
     * 一小时以内显示几分钟前
     * 24小时内显示几小时前
     * 超过24小时三天内（含三天）显示几天前
     * 3天以上显示具体日期，不显示年份
     * 超过一年显示年-月-日，不显示时间
     *
     * @param date
     * @return
     */
    public static String betweenOfNow(Date date) {
        return between(DateUtil.date(), date);
    }

    /**
     * 计算日期间隔
     * <p>
     * 一小时以内显示几分钟前
     * 24小时内显示几小时前
     * 超过24小时三天内（含三天）显示几天前
     * 3天以上显示具体日期，不显示年份
     * 超过一年显示年-月-日，不显示时间
     *
     * @param end 待解析日期
     * @return
     */
    public static String between(Date start, Date end) {
        //超过一年显示年份
        if (DateUtil.betweenYear(start, end, false) > 0) {
            return DateUtil.formatDate(end);
        }
        //3天以上显示具体日期，不显示年份
        if (DateUtil.betweenDay(start, end, false) > 3) {
            return DateUtil.format(end, "MM-dd");
        }
        long hour = DateUtil.between(start, end, DateUnit.HOUR);
        //超过24小时三天内（含三天）显示几天前
        if (hour > 24) {
            return String.format("%d 天前", DateUtil.betweenDay(start, end, false));
        }
        if (hour > 0) {
            return String.format("%d 小时前", hour);
        }
        long minute = DateUtil.between(start, end, DateUnit.MINUTE);
        if (minute > 0) {
            return String.format("%d 分钟前", minute);
        }
        return "刚刚";
    }

}